package top.z.work.module.system.convert;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import top.z.work.framework.common.pojo.PageInfo;
import top.z.work.module.system.controller.dict.vo.SystemDictTypeCreateVO;
import top.z.work.module.system.controller.dict.vo.SystemDictTypeModifyVO;
import top.z.work.module.system.controller.dict.vo.SystemDictTypeVO;
import top.z.work.module.system.entity.SystemDictType;

import java.util.List;

@Mapper
public interface SystemDictTypeConvert {

    SystemDictTypeConvert INSTANCE = Mappers.getMapper(SystemDictTypeConvert.class);

    default QueryWrapper convert(SystemDictTypeVO parameter) {
        return QueryChain.of(SystemDictType.class)
                .eq(SystemDictType::getIdentity, parameter.getIdentity())
                .eq(SystemDictType::getName, parameter.getName())
                .eq(SystemDictType::getCode, parameter.getCode())
                ;
    }

    List<SystemDictTypeVO> convert(List<SystemDictType> parameter);

    SystemDictType convert(SystemDictTypeModifyVO parameter);

    SystemDictTypeVO convert(SystemDictType parameter);

    SystemDictType convert(SystemDictTypeCreateVO parameter);

    default PageInfo<SystemDictTypeVO> convert(Page<SystemDictType> page) {
        List<SystemDictTypeVO>     list     = page.getRecords().stream().map(this::convert).toList();
        PageInfo<SystemDictTypeVO> pageInfo = new PageInfo<>();
        pageInfo.setList(list);
        pageInfo.setTotal(page.getTotalRow());
        pageInfo.setSize(page.getPageSize());
        pageInfo.setPage(page.getPageNumber());
        return pageInfo;
    }

}
